package aplicacao;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextPane;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

public class Aplicacao extends JFrame{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private JScrollPane scrollPane_principal;
	private JPanel panel_principal;
	private JScrollPane scrollPane_dados_entrada;
	private JLabel lblDadosDeEntrada;
	private JPanel panel_dados_entrada;
	private JLabel lbl_transacoes;
	private JSpinner spinner_transacoes;
	private JLabel lbl_protocolo;
	private JComboBox<String> comboBox_protocolo;
	private JScrollPane scrollPane_saida;
	private JPanel panel_saida;
	private JTextPane textPane_saida;
	private JLabel lbl_saida;
	private JButton btnExecutar;
	//
	private int quantidadeTransacoes;
	private String algoritmo;
	private String transacoes;
	private String resultado = "";
	private String primeiro_scheduler;
	private String segundo_scheduler;
	private String abortados;
	
	public Aplicacao() {
		
		carregarComponentes();
		carregarEventos();
	}
	
	public void carregarComponentes() {
		
		/* Configurando a Janela */
		setTitle("T\u00E9cnicas de Implementa\u00E7\u00E3o de Banco de Dados - UNIFOR");
		setSize(750, 650);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
		setResizable(false);
		
		
        
		scrollPane_principal = new JScrollPane();
		getContentPane().add(scrollPane_principal, BorderLayout.CENTER);
		
		panel_principal = new JPanel();
		scrollPane_principal.setViewportView(panel_principal);
		panel_principal.setLayout(null);
		
		JLabel lbl_controleConcorrencia = new JLabel("Controle de Concorr\u00EAncia");
		lbl_controleConcorrencia.setFont(new Font("Comic Sans MS", Font.BOLD, 20));
		lbl_controleConcorrencia.setHorizontalAlignment(SwingConstants.CENTER);
		lbl_controleConcorrencia.setBounds(26, 11, 688, 24);
		panel_principal.add(lbl_controleConcorrencia);
		
		lblDadosDeEntrada = new JLabel("Dados de entrada:");
		lblDadosDeEntrada.setBounds(26, 46, 113, 14);
		panel_principal.add(lblDadosDeEntrada);
		
		scrollPane_dados_entrada = new JScrollPane();
		scrollPane_dados_entrada.setBounds(26, 60, 688, 36);
		panel_principal.add(scrollPane_dados_entrada);
		
		panel_dados_entrada = new JPanel();
		scrollPane_dados_entrada.setViewportView(panel_dados_entrada);
		panel_dados_entrada.setLayout(null);
		
		lbl_transacoes = new JLabel("Transa\u00E7\u00F5es: ");
		lbl_transacoes.setBounds(10, 8, 76, 14);
		panel_dados_entrada.add(lbl_transacoes);
		
		spinner_transacoes = new JSpinner();
		spinner_transacoes.setBounds(85, 5, 76, 20);
		panel_dados_entrada.add(spinner_transacoes);
		
		lbl_protocolo = new JLabel("Protocolo: ");
		lbl_protocolo.setBounds(182, 8, 76, 14);
		panel_dados_entrada.add(lbl_protocolo);
		
		comboBox_protocolo = new JComboBox<String>();
		comboBox_protocolo.addItem("Selecione");
		comboBox_protocolo.addItem("Timestamp");
		comboBox_protocolo.setBounds(246, 7, 150, 17);
		panel_dados_entrada.add(comboBox_protocolo);
		
		btnExecutar = new JButton("Executar");
		btnExecutar.setBounds(522, 4, 125, 23);
		panel_dados_entrada.add(btnExecutar);
		
		scrollPane_saida = new JScrollPane();
		scrollPane_saida.setBounds(26, 168, 688, 389);
		panel_principal.add(scrollPane_saida);
		
		panel_saida = new JPanel();
		scrollPane_saida.setViewportView(panel_saida);
		panel_saida.setLayout(new BorderLayout(0, 0));
		
		textPane_saida = new JTextPane();
		textPane_saida.setFont(new Font("Arial", Font.BOLD, 12));
		textPane_saida.setEditable(false);
		panel_saida.add(textPane_saida);
		
		lbl_saida = new JLabel("Sa\u00EDda: ");
		lbl_saida.setBounds(26, 152, 46, 14);
		panel_principal.add(lbl_saida);
		
	}
	
	public void carregarEventos() {
		btnExecutar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				quantidadeTransacoes = (int) spinner_transacoes.getValue();
				algoritmo = (String) comboBox_protocolo.getSelectedItem();
				Gerenciador gerenciador = new Gerenciador();
				gerenciador.criarTransacoes(quantidadeTransacoes);
				transacoes = gerenciador.retornarTransacoes();
				gerenciador.gerarScheduler();
				primeiro_scheduler = gerenciador.retornarScheduler();
				gerenciador.timeStamp();
				abortados = gerenciador.retornarTransacaoAbortada();
				segundo_scheduler = gerenciador.retornarScheduler();
				
				resultado += transacoes;
				resultado += primeiro_scheduler;
				resultado += abortados;
				resultado += segundo_scheduler;
				
				textPane_saida.setText(resultado);
				}
		});
	}
	
	public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Aplicacao aplicacao = new Aplicacao();
                aplicacao.setVisible(true);
            }
        });
    }
}
